package chapter04

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test02_For
 * Package: chapter04
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-06-19
 *          Time: 21:34
 */

object Test02_For {
  def main(args: Array[String]): Unit = {
    //循环控制 to 不是关键字 而是 方法调用
    //底层调用了Range类创建的一个集合对象 to边界都能取到
    for (i <- 1 to 10) {
      println(i + "简单的循环遍历")
    }

    //本质就是创建的集合
    for (i <- Array(12, 34, 45)) {
      println(i)
    }

    //Until 前边后开的形式  Unit是返回值
    //使用Range构造函数效果等同
    for (i <- 1 until 4) {
      println(i)
    }


    //循环守卫  1 != 3 为真放行 往下执行
    for (i <- 1 to 10 if i != 3) {
      //表示i等于三的时候 直接跳过 不取i==3的值
      println(i)
    }

    println("-----------------")
    //循环步长 就相当于是 i++ 这个操作
    for (i <- 1 to 10 by -1) {
      //从1开始 之后的每个数 都++2 输出奇数
      println(i)
    }
    //步长也可以为负数 但是 要定义好大小数的顺序

    for (i <- 10 to 1 by -1) {
      //逆向输出 10 9 8...
      println(i)
    }
    //效果等同使用 reverse
    for (i <- 1 to 10 reverse) {
      println(i)
    }

    //步长不可以为0 为0直接抛异常
    //步长也可以是浮点数比如 0.5 但是前面对应的数值范围也应是浮点数

    //循环嵌套 直接在一个括号里面分号隔开
    for (i <- 1 to 5; j <- 1 to 3) {
      println(i + " " + j)
    }

    //引入变量 对应的输出i j的对应关系 就像函数一行 直接分号定义在后面
    for (i <- 1 to 3; j = 4 - i) {
      println(i + " " + j)
    }
    //在引入变量的时候 相当于写了表达式
    //当只有一个表达式的时候 可以使用分号 和 圆括号
    //当有多个表达式的时候 换行写 然后使用花括号

    //循环返回值
    //yield 表示当前循环 生成一个集合类型作为返回值 i就是要返回的对象
    val res = for (i <- 1 to 5) yield i
    println(res) //Vector(1, 2, 3, 4, 5)


  }
}
